package com.service;


import com.dao.EmpChargeActivityDao;
import com.dao.EmployeeDao;
import com.domain.EmpChargeActivity;
import com.domain.Employee;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;


public class employeeService {
    private EmployeeDao employeeDao = new EmployeeDao();
    private EmpChargeActivityDao empChargeActivityDao= new EmpChargeActivityDao();

    /**
     * 员工的登录查询方法
     * @param phone String类型的号码数据
     * @param password String类型的密码数据
     * @return 返回Employee类型的对象
     */
    public Employee login(String phone , String password){

        Employee employee = employeeDao.loginEmployee(phone, password);
        //假如查询有值，屏蔽密码
        if(employee!=null){
            employee.setEmployeePassword("********");
        }
        return employee;
    }

    /**
     * 员工注册
     * @param employee  Employee实体类的对象
     * @return 返回Integer类型，1为可以注册，0为不可以注册
     */
    public Integer regist(Employee employee){
        Integer integer = employeeDao.addEmployee(employee);
        return integer;
    }

    /**
     * 用号码查询员工的信息
     * @param phone 传入int类型的数据
     * @return 返回Employee类型的对象
     */
    public Employee findThisEmployee(Integer phone){
        Employee employee = employeeDao.findEmployee(phone);
        if(employee!=null){
            employee.setEmployeePassword("********");
        }
        return employee;
    }

    /**
     * 用名字查询员工的信息
     * @param employeePhone  传入String类型的员工号码
     * @param employeePassword 传入String类型的员工密码
     * @return 返回Employee类型的对象
     */
    public List<Employee> findEmployeeName(String employeePhone,String employeePassword){
        List<Employee> list = employeeDao.findEmployeeName(employeePhone,employeePassword);
        return list;
    }

    /**
     * 对员工的信息进行更新
     * @param employee  传入Employee类型的对象
     * @return Integer类型的数据，1为成功，0为失败
     */
    public Integer updateEmployee(Employee employee){
        Integer update = employeeDao.updateEmployee(employee);
        return update;
    }

    /**
     * 员工的名字和号码进行查询
     * @param name String类型的员工名字
     * @param phone String类型的员工号码
     * @return 返回Employee的类型对象
     */
    public Employee findEmpNamePass(String name, String phone){
        Employee empNamePass = employeeDao.findEmpNamePass(name, phone);
        return empNamePass;
    }

    /**
     * 修改员工的密码
     * @param employeePassword String类型的员工密码
     * @param employeeName String类型的员工名字
     * @param employeePhone String类型的员工号码
     * @return Integer类型的数据，1为成功，0为失败
     */
    public Integer updateEmpPass(String employeePassword,String employeeName,String employeePhone){
        Integer update = employeeDao.updateEmpPass(employeePassword, employeeName, employeePhone);
        return update;
    }

    /**
     * 员工登录的时候进行对数据库的二进制文件进行读取备份
     * @param phone String类型的员工号码
     * @param password String类型的员工密码
     * @throws IOException 对输入输出流的错误抛出
     * 1.对 ndb_binlog_index.frm文件进行备份
     * 2.对 ndb_binlog_index.MYI文件进行备份
     * 3.对 ndb_binlog_index.MYD文件进行备份
     */
    public void faveSql(String phone,String password) throws IOException {
        //1.查询员工的信息
        Employee employee = employeeDao.loginEmployee(phone, password);
        //2.创建输入流
        FileInputStream in1 = new FileInputStream("D:\\Mysql5.7\\mysql-5.7.16-winx64\\data\\mysql\\ndb_binlog_index.frm");
        FileInputStream in2 = new FileInputStream("D:\\Mysql5.7\\mysql-5.7.16-winx64\\data\\mysql\\ndb_binlog_index.MYI");
        FileInputStream in3 = new FileInputStream("D:\\Mysql5.7\\mysql-5.7.16-winx64\\data\\mysql\\ndb_binlog_index.MYD");
        //3.创建输出流,对数据进行覆盖（false），没有这个文件便会创建这个文件
        FileOutputStream out1 = new FileOutputStream("E:\\Mysql5.7\\employeeData\\"+employee.getEmployeeName()+"ndb_binlog_index.frm",false);
        FileOutputStream out2 = new FileOutputStream("E:\\Mysql5.7\\employeeData\\"+employee.getEmployeeName()+"ndb_binlog_index.MYI",false);
        FileOutputStream out3 = new FileOutputStream("E:\\Mysql5.7\\employeeData\\"+employee.getEmployeeName()+"ndb_binlog_index.MYD",false);
        //4.进行写入数据,进行循环复制(一串一串的读)
        int len;
        byte arr[]=new byte[2048];//速度为2M每秒
        while((len=in1.read(arr))!=-1){
            //进行写入
            out1.write(arr,0,len);
            //进行手动刷新，也可以不刷新，关闭前会自动刷新
            out1.flush();
        }
        while((len=in2.read(arr))!=-1){
            //进行写入
            out2.write(arr,0,len);
            //进行手动刷新，也可以不刷新，关闭前会自动刷新
            out2.flush();
        }
        while((len=in3.read(arr))!=-1){
            //进行写入
            out3.write(arr,0,len);
            //进行手动刷新，也可以不刷新，关闭前会自动刷新
            out3.flush();
        }
        //关闭输入输出流
        in1.close();
        in2.close();
        in3.close();
        out1.close();
        out2.close();
        out3.close();
    }

    /**
     * 根据员工的id查询所有职责分工
     * @param employeeId 传入Integer类型的员工Id
     * @return 返回List类型的EmpChargeActivity对象数据
     */
    public List<EmpChargeActivity> FindECA(Integer employeeId){
        List<EmpChargeActivity> list = empChargeActivityDao.FindECA(employeeId);
        return list;
    }
}
